Skip to main content

Script

O bloco "Script" permite a utilização de comandos dentro do Digital Contact Bots, tornando o fluxo mais versátil e permitindo a execução de funções programáveis dentro do bot. Com ele, é possível:

  • manipular variáveis
  • criar validações
  • acessar APIs
  • realizar integrações externas ao Digital Contact Bots
  • entre outras funcionalidades

Configurações do bloco "Script" no Digital Contact Bots

O bloco "Script" pode ser encontrado no menu lateral esquerdo, na seção “Programação”:

Image 5

Ao ser inserido no fluxo, o bloco será exibido da seguinte forma:

Image 9

O menu lateral direito contém apenas o botão “Editar script”:

Image 2

Ao clicar em Editar script, será exibido o modal de edição de scripts:

Image 1

O Editor de Script possui os seguintes elementos:

  1. Adicionar variáveis: adiciona variáveis (globais ou do fluxo) ao editor de scripts.

Image 4

  1. Carregar Templates: este botão insere um código inicial (template) no editor de scripts.
    • Ele só funciona se o editor estiver vazio; caso contrário, permanecerá desabilitado.

Image 3

  1. Editor de código

    O script pode utilizar diferentes campos dentro do response:
    a. messages: array de mensagens enviadas ao cliente durante a execução do bloco de "script". (Pode incluir mensagens fixas ou com variáveis);
    b. clientMessage: simula uma mensagem do cliente. (Funciona apenas no WebChat e não interage com IA, rotas de fuga ou variáveis globais);

    • No histórico, aparecerá com o nome “Via Script”, em vez de “Usuário”.

    Image 7

    c. insertTags: Array de strings contendo as tags adicionadas ao fluxo no final da execução do script.

    • As tags podem ser criadas automaticamente pelo bloco, caso ainda não existam.

    • Como Testar:

      1. insira um novo bloco de "Script";
      2. verifique se o template está de acordo com a descrição;
      3. executar o fluxo;
      4. no relatório de Histórico de Eventos, verifique se as tags foram adicionadas corretamente;

    d. updateVariables: Array de objetos que cria ou atualiza variáveis dentro do fluxo.

  2. Cancelar

  3. Salvar

Pontos de atenção

O menu de configurações do bloco exibe alertas caso algumas regras não sejam atendidas:

  • bloco sem script cadastrado;
  • script sem finalização;

Image 6

Templates de Script

Abaixo estão alguns exemplos simples dos scripts mais comuns usados no bloco de "Script".

Importação de bibliotecas

Nosso bloco de script não permite importações de bibliotecas. Qualquer código que utilize instruções como "require" ou "import" será desconsiderado.

As bibliotecas nativamente instanciadas são:

  • Lodash
  • Axios
  • Moment
  • Blowfish
  • Crypto
  • oAuth 1.0

Como usar:

Lodash

// Exemplo: remover valores falsy de um array
const data = [0, 1, false, 2, '', 3];
const cleaned = _.compact(data);
const cleanedString = JSON.stringify(cleaned); // [1,2,3]

const response = {
messages: [
cleanedString
],
updateVariables: [
{
dataCleaned: cleanedString
}
]
};

done(response);

Documentação oficial: https://www.npmjs.com/package/lodash

Axios

// Exemplo: fazer uma requisição GET
const { data } = await axios.get('https://pokeapi.co/api/v2/pokemon?limit=1000');
const pokemons = data.results;
const random1 = pokemons[Math.floor(Math.random() * pokemons.length)].name;
const random2 = pokemons[Math.floor(Math.random() * pokemons.length)].name;

const response = {
messages: [
`O meu pokemon favorito é o ${random1}`
],
clientMessage: `O meu é o ${random2}`,
updateVariables: [
{
pokemonBot: random1,
pokemonClient: random2
}
]
};

done(response);

Documentação oficial: https://www.npmjs.com/package/axios

Moment

const now = moment();
const data = now.format('YYYY-MM-DD HH:mm:ss'); // Ex: "2025-08-05 15:30:00"

// Exemplo: calcular diferença de datas
const birthDate = moment("2000-01-01");
const age = moment().diff(birthDate, 'years');

const response = {
messages: [
data
],
clientMessage: `Eu tenho ${age} anos de idade.`,
updateVariables: [
{
data : data,
idade: age
}
]
}

done(response);

Documentação oficial: https://www.npmjs.com/package/moment

Blowfish

// Exemplo de uso básico do blowfish
const Blowfish = require("blowfish-node")
const key = 'keyExemplo'
const bf = new Blowfish(key);
let textoDescriptografado;
let textoOriginal;

function decodeValue(value) {
const buffer = Buffer.from(value, 'base64');
const decoded = bf.decode(buffer, Blowfish.MODE.ECB, Blowfish.PADDING.NULL);
return decoded.toString('utf8').replace(/\0/g, '');
}

try {
if ('$$textoOriginal$$' ) {
textoDescriptografado = decodeValue('$$textoOriginal$$');
textoOriginal = '$$textoOriginal$$'
}
} catch {}

const response = {
messages: [
`Texto Original: ${textoOriginal}
Texto Descriptografado: ${textoDescriptografado}`
],
updateVariables: [
{
textoDescriptografado: textoDescriptografado
},
]
};

done(response); // This is required.

Documentação oficial: https://www.npmjs.com/package/blowfish-node

Crypto

// Importando a lib
const crypto = require('crypto');

// Gerando uuid aleatório
const uuid = crypto.randomUUID();

// Criando o objeto de resposta
const response = {
messages: [
uuid
],
};

done(response); // Necessário para retornar a resposta final

Documentação oficial: https://nodejs.org/api/crypto.html

oAuth-1.0a

// Importação das libs
const OAuth = require('oauth-1.0a');
const crypto = require('crypto');

const oauth = new OAuth({
consumer: {
key: 'dummy-consumer-key',
secret: 'dummy-consumer-secret',
},
signature_method: 'HMAC-SHA1',
hash_function(baseString, key) {
return crypto
.createHmac('sha1', key)
.update(baseString)
.digest('base64');
},
});

const requestData = {
url: 'https://example.com/api/test',
method: 'POST',
data: {
foo: 'bar',
hello: 'world',
},
};

const token = {
key: 'dummy-token-key',
secret: 'dummy-token-secret',
};

const oauthData = oauth.authorize(requestData, token);
const headers = oauth.toHeader(oauthData);

const response = {
messages: [
'Sample Oauth1.0',
headers.Authorization
],
};

done(response); // Necessário para retornar a resposta final

Documentação oficial: https://github.com/ddo/oauth-1.0a


Observação: embora o bloco de "Script" possa realizar requisições HTTP, é recomendado utilizar o bloco APIv2 para esse propósito.

  • Vantagem: Usando o APIv2, você pode visualizar as requisições nos relatórios e identificar possíveis erros.

Uma boa prática de utilização é realizar a chamada com o bloco de APIv2 e caso necessário em seguida utilizar o bloco de script para fazer a manipulação e tratamento dos dados.

Melhorias

Este botão insere um código inicial (template) no editor de código, caso ele esteja vazio.
Caso contrário, o botão permanecerá desabilitado.

Image 8

Limitações e Processamento do Bloco "Script"

Processamento de Variáveis

  • Todas as variáveis delimitadas por $$ são substituídas pelo respectivo valor.
    • Exemplo: let nome = "$$nome$$"; será processado como let nome = "João";.

Escape de Caracteres

  • Apenas os seguintes caracteres são escapados dentro das variáveis:
    • \\n (quebra de linha com escape) = \n
    • ' (aspas simples) = \'
    • " (aspas duplas) = \"
    • ` (crase) = ```
    • \ (contrabarra) = \\

Quebra de Linha

  • Tanto \n quanto \\n são aceitos para representar quebras de linha.
    • Exemplo: "Nome:\nJoão da Silva" será processado como:
      Nome:
      João da Silva
    • Exemplo: "Nome:\\nJoão da Silva" será processado como:
      Nome:
      João da Silva